'''
    第一周 作业三  模拟实现自动取款机系统
    功能包括：
    1. 登录功能
    2. 查询余额
    3. 取款
    4. 存款
    5. 退出功能
    @author  宛茹
'''

# 定义一个当前正在处理的全局客户信息
customer = {}

# 创建数据源信息  客户信息列表，列表里是一个个字典对象
# 创建数据源信息  客户信息列表，列表里是一个个字典对象
cusList = [
    {'accId':'62212268','accPswd':'yy7878','accName':'孙沐崖','accBals':54321.77},
    {'accId': '62212279','accPswd': 'tt8989','accName': '王依依', 'accBals': 18034.23},
    {'accId': '62212255','accPswd': '123346','accName': '陈飒', 'accBals': 458034.00},
    {'accId': '62212211', 'accPswd': '666666', 'accName': '林佳音', 'accBals': 60000.00}
]

# 2. 定义查询余额的函数
def showBalance():
    print('{}{}{}'.format('您的账户余额是：', customer['accBals'], '元'))


# 3. 定义取款的函数
def withdraw(num):
    # 获取旧的金额
    oldBals = float(customer['accBals'])
    if oldBals >= num:
        # 将新的余额进行赋值
        customer['accBals'] = round(oldBals - num,2)
        # 显示取款后的余额
        print('{}{}'.format('取款成功！最新余额是：',customer['accBals']))
        input('按回车继续：')
    else:
        input('余额不足！按回车继续：')


# 4. 定义存款的函数
def deposit(addNum):
    # 获取旧的金额
    oldBals = float(customer['accBals'])
    # 将新的余额进行赋值
    customer['accBals'] = round(oldBals + addNum,2)
    # 显示存款后的余额
    print('{}{}'.format('存款成功！最新余额是：', customer['accBals']))
    input('按回车继续：')

# 5. 定义退出函数
def logout():
    pass

# ATM交互界面
def operateAcc():
    # 显示操作界面
    print('尊敬的{} 您好！'.format(customer['accName']))
    print('{:1}{:<15}{:<15}'.format(' ', '1. 查询余额', '2. 取款操作'))
    print('{:1}{:<15}{:<15}'.format(' ', '3. 存款操作', '4. 退出操作'))

    while True:
        key = input('请输入对应的选择：')
        # 输出账户余额
        if key == '1':
            # print('{}{}{}'.format('您的账户余额是：',customer['accBals'],'元'))
            showBalance()
            input('按回车继续：')
        # 进行取款操作
        elif key == '2':
            print('{}{}{}'.format('您的账户余额是：', customer['accBals'], '元'))
            num = input('请输入您要取款的金额：')
            while True:
                # 判断输入的取款金额是否是整数
                if num.isdigit():
                    num = int(num)
                    if num > 0:
                        withdraw(num)
                        # 跳出读取取款金额的循环
                        break
                    else:
                        num = input('无效输入！请重新输入：')
                else:
                    # 如果输入的不是整数，进行报错处理
                    num = input('无效输入！请重新输入：')
        # 注意字符匹配
        elif key == '3':
            addNum = input('请输入您要存款的金额：')
            while True:
                # 判断输入的存款金额是否是整数
                if addNum.isdigit():
                    addNum = int(addNum)
                    if addNum > 0:
                        deposit(addNum)
                        # 跳出读取存款金额的循环
                        break
                    else:
                        addNum = input('无效输入！请重新输入：')
                # 如果输入的不是整数，进行报错处理
                else:
                    addNum = input('无效输入！请重新输入：')
        elif key == '4':
            logout()
            print('=' * 12, '再 见', '=' * 12)
            break
        else:
            print('=' * 12, '操作无效', '=' * 12)

# 1. 登录交互界面
while True:
    # 输出初始界面
    print('=' * 12, '欢迎登陆ATM取款系统', '=' * 12)
    testId = input('请输入您的用户名：')

    # 定义一个局部变量用于控制 用户名不存在的输出，0表示默认用户名不存在
    flag = 0

    # 遍历客户信息列表
    for cusObj in cusList:
        # 如果能找到对应的用户名
        if cusObj['accId'] == testId:
            # 修改为1表示用户名存在
            flag = 1
            testPswd = input('请输入您的密码：')
            while True:
                # 继续判断密码是否一致
                if cusObj['accPswd'] == testPswd:
                    print()
                    print('=' * 12, '登陆成功', '=' * 12)
                    # 给当前处理客户赋值
                    customer = cusObj
                    # 进入 操作交互界面
                    operateAcc()
                    break
                else:
                    testPswd = input('密码不正确，请重新输入:')

    if flag == 0:
        print('用户名不存在，请重新输入')




